input[type=radio]radio都是用在只能單選一項的時候,監聽 change 事件。
因為 radio 只能單選一項,全部的 radio 都要綁定相同的 name,才能只選到一個,不然就會全部都能選到。
<div class="gender-content each-content">
  <label for="gender">gender: </label>
    
  <input type="radio" id="default" value="" disabled />
    
  <label for="default">choose one</label>
  <input
    name="gender"
    type="radio"
    id="male"
    value="male" />
    
  <label for="male">male</label>
  <input
    name="gender"
    type="radio"
    id="female"
    value="female" />
  <label for="female">female</label>
    
  <input
    name="gender"
    type="radio"
    id="transgender"
    value="transgender"/>
  <label for="transgender">transgender</label>
    
</div>
<p></p>
let gender = '';
const male = document.querySelector('#male')
const female = document.querySelector('#female')
const transgender = document.querySelector('#transgender')
const textP = document.querySelector('p')
male.addEventListener('change', function () {
    gerder = ''
	gender = male.value;
	textP.textContent = gender;
})
female.addEventListener('change', function () {
	gerder = ''
	gender = female.value
	textP.textContent = gender;
})
transgender.addEventListener('change', function () {
	gerder = ''
	gender = transgender.value
	textP.textContent = gender;
})

把同樣在原生裡面 name 的觀念套在 v-model 上的話就是每個 radio 的 v-model 都要是一樣的。
const gender = ref('')
<div class="gender-content each-content">
  <label for="gender">gender: </label>
    
  <input type="radio" id="default" value="" disabled />
    
  <label for="default">choose one</label>
  <input
    type="radio"
    id="male"
    value="male"
    v-model="gender" />
    
  <label for="male">male</label>
  <input
    type="radio"
    id="female"
    value="female"
    v-model="gender" />
    
  <label for="female">female</label>
  <input
    type="radio"
    id="transgender"
    value="transgender"
    v-model="gender" />
  <label for="transgender">transgender</label>
    
  <p>{{ gender }}</p>
</div>

這樣就不會發生那種怎麼每個都可以選的窘境拉XD
select監聽 change 事件。
<select> 比較特別,他會包著一連串的 <option> ,select 本身是沒有 value的,是要看現在 option 選到哪一個,那個的value 就會變成 select 的 value。
<div class="flavor-content each-content">
    <label for="flavor">flavor: </label>
    
    <select name="flavor" id="flavor">       
        <option value="">--select flavor--</option>
        <option value="chocolate">chocolate</option>
        <option value="berry">berry</option>
        <option value="banana">banana</option>
        <option value="apple">apple</option>
        <option value="vanilla">vanilla</option>        
    </select>
    
</div>
<p></p>
所以就只要拿到 flavor.value 再賦值給 p 就好了
const flavor = document.querySelector('#flavor')
const text = document.querySelector('p')
flavor.addEventListener('change', function() {
	text.textContent = flavor.value;
})
我要哭了,程式碼有夠少,舒服

codepen: https://codepen.io/Jadddxx/pen/xxjQNQE?editors=1010
跟原生的一樣,所以 v-model 綁的位置是在 select 上,由他來決定 value 是什麼,而原生本來就會幫我們做到 選擇的 option 的 value 會給 select了,不必再選到 option 去拿 value。
這裡會用 v-for 來 renfer <option>。
javscript:
const flavorText = ref('')
const flavorList = reactive([
  "chocolate",
  "berry",
  "banana",
  "apple",
  "vanilla",
]);
template:
<div class="flavor-content each-content">
  <label for="flavor">flavor: </label>
  <select name="flavor" id="flavor" v-model="flavorText">
    <option value="">--select flavor--</option>
    <option v-for="flavor in flavorList" :value="flavor" :key="flavor">
      {{ flavor }}
    </option>
  </select>
  <p>{{ flavorText }}</p>
</div>

<select> 上<input type="text"> ,<textarea> 綁定value值,響應式變數拿到的就是value的值<input type="checkbox">
<input type="radio">
<input name='gender'>的name要一樣的,才會是一個單一選項。<select>包著<option>
<select> 的value會隨著<option>選到的值去改變,所以原始的<select> value 就是空的,也不需要給他value。<select>上,由選到哪一個 <option> 的value來決定。原本Vue的範例已經做好了,本來只是想大概說一下原生跟Vue的差別,然後原生用簡單的範例(例如一個的checkbox)的那種,後來想說跟Vue做一樣的才能比較啊,可是用原生的去做雙向綁定好麻煩啊~~code長的跟什麼一樣....
其實都是原生的東西不懂才不知道為什麼 v-model 要放在那個位置上啊~
快結束了ya
參考資料:
MDN input
MDN <select>: The HTML Select element
Vue Form Input Bindings